一、说明
Spring Security是Spring进行用户权限认证与授权的安全框架,一般在使用中都会结合JWT(Java Web Token)来进行用户登陆的验证,看用户是否有权限登陆进行相关的操作。JWT实则就是一个过滤器,根据密钥和时间来验证当前用户的请求是否有效,具体的方法访问权限由Sping Security控制。
为什么使用Token而不使用Session?
这里要明确一点,Session是存放在服务器端的,大量Session会占用内存,同时,多服务器又会出现Session如何共享的问题,使用Token更加方便前后的分离的项目或者多系统间进行权限认证,也不会占用服务内存,更不用考虑Session共享问题,只需要在请求的时候带上这个Token就可以了。
二、代码实现
1.jwt工具类
完成Token的创建,刷新,验证等功能
1 | 4j |
2.jwt登陆过滤器
配合Spring Security完成Token的校验
1 | 4j |
3.Spring Security配置类
完成Spring Security的配置,包含认证与授权,同时包含Jwt验证和登陆失败和方法权限认证失败的拦截器
1 |
|
4.自定义Spring Security UserDetails实现
重要是为了获取前端登陆是的用户信息,根据用户的登陆信息去数据库获取用户的权限,封装成一个UserDetails进行返回,Spring Security根据这个UserDetails进行具体的授权
1 |
|
5.方法拒绝拦截器
1 |
|
6.登陆校验失败拦截器
1 |
|
参考:
https://www.cnblogs.com/harrychinese/p/SpringBoot_security_basics.html
https://blog.csdn.net/itguangit/article/details/78960127
https://www.jianshu.com/p/6307c89fe3fa
https://blog.csdn.net/moshowgame/article/details/96476554
https://blog.csdn.net/w605283073/article/details/51327182
https://cloud.tencent.com/developer/article/1046663
https://github.com/macrozheng/mall-learning
为什么要用token?